//
//  BTLog.swift
//  BasicTools
//
//  Created by ikang on 2025/10/28.
//

import os.log
import Foundation

public enum BTLogType {
    case none       // 不显示日志
    case all        // 显示全部日志
    case debug      // 仅显示debug日志
    case info       // 仅显示info日志
    case warning    // 仅显示warning日志
    case error      // 仅显示error日志
    case trace      // 仅显示trace日志
    case notice     // 仅显示notice日志
    case critical   // 仅显示critical日志
    case fault      // 仅显示fault日志
}

public class BTLog {
    private static var subSystem = Bundle.main.bundleIdentifier
    private static let logger = Logger(subsystem: subSystem ?? "", category: "BT")
    private static var logType: BTLogType = .none
    
    /// 设置输出日志类型
    /// - Parameter type: 输出日志类型，默认为.all
    static public func setLogType(type: BTLogType = .all) {
        logType = type
    }
    
    /// 输出debug类型
    /// - Parameter message: 输出文字
    static public func debug(_ message: String) {
        if logType == .all || logType == .debug {
            logger.debug("Log Debug: \(message)")
        }
    }
    
    /// 输出info类型
    /// - Parameter message: 输出文字
    static public func info(_ message: String) {
        if logType == .all || logType == .info {
            logger.info("Log Info: \(message)")
        }
    }
    
    /// 输出warning类型
    /// - Parameter message: 输出文字
    static public func warning(_ message: String) {
        if logType == .all || logType == .warning {
            logger.warning("Log Warning: \(message)")
        }
    }
    
    /// 输出error类型
    /// - Parameter message: 输出文字
    static public func error(_ message: String) {
        if logType == .all || logType == .error {
            logger.error("Log Error: \(message)")
        }
    }
    
    /// 输出trace类型
    /// - Parameter message: 输出文字
    static public func trace(_ message: String) {
        if logType == .all || logType == .trace {
            logger.trace("Log Trace: \(message)")
        }
    }
    
    /// 输出notice类型
    /// - Parameter message: 输出文字
    static public func notice(_ message: String) {
        if logType == .all || logType == .notice {
            logger.notice("Log Trace: \(message)")
        }
    }
    
    /// 输出critical类型
    /// - Parameter message: 输出文字
    static public func critical(_ message: String) {
        if logType == .all || logType == .critical {
            logger.critical("Log Trace: \(message)")
        }
    }
    
    /// 输出fault类型
    /// - Parameter message: 输出文字
    static public func fault(_ message: String) {
        if logType == .all || logType == .fault {
            logger.fault("Log Trace: \(message)")
        }
    }
    
}


